package mian01

import "time"

// https://juejin.cn/post/7274188187676917812?from=search-suggest
// 一看就明白的Go语言并发教程
// 通道分为有缓冲通道和无缓冲通道。使用通道的一个实例，一个协程输入数字，一个协程计算平方，主协程打印结果，代码如下：

func calSquare() {
	src := make(chan int)
	dest := make(chan int, 3)
	//子协程1发送数字0-9
	go func() {
		defer close(src)
		for i := 0; i < 10; i++ {
			src <- i
			time.Sleep(time.Second)
		}
	}()
	//子协程2计算输入数字的平方
	go func() {
		defer close(dest)
		for i := range src {
			dest <- i * i
		}
	}()
	//主协程打印数字
	for i := range dest {
		println(time.Now().Format("15:04:05"), "平方数", i, "通道内元素个数", len(dest))
	}
}

func ChannelDemo01() {
	calSquare()
}
